#ifndef bstcpH
#define bstcpH

#ifdef __cplusplus
extern "C" {
#endif

#if defined(BK_HP)
   #define SUN_LEN(x) (sizeof(struct sockaddr_un) - \
                       sizeof((x)->sun_path) + \
                       strlen((x)->sun_path) + 1)
#endif

#define  BS_TIME_INFINITE          -1

#define  BS_EOTHER                 -1  /* 其他错误 */
#define  BS_ETIMEOUT               -2  /* 超时 */
#define  BS_E2BIG                  -4  /* 数据超长 */

int BsSockOptOn(int sock, int level, int name);

int BsSockOptOff(int sock, int level, int name);

/* 创建服务器端 socket */
int BsCreateServerSocket(const char *IpAddr, int Port, int ListenQ);

/* 创建客户机端 socket */
int BsCreateClientSocket(const char *IpAddr, int Port, int MilliSecTimeOut);

/* 等待连接，成功返回新创建的 socket，失败返回负数：
   BK_ETIMEOUT 表示超时、BK_EOTHER 表示其他错误 */
int BsAcceptConnection(int Sock, char *IpAddr, int MilliSecTimeOut);

/* 创建UNIX域服务器端 socket */
int BsCreateServerSocketUD(const char *Path, int ListenQ);

/* 创建UNIX域客户机端 socket */
int BsCreateClientSocketUD(const char *Path, int MilliSecTimeOut);

/* 等待UNIX域连接，成功返回新创建的 socket，失败返回负数：
   BK_ETIMEOUT 表示超时、BK_EOTHER 表示其他错误 */
int BsAcceptConnectionUD(int Sock, char *IpAddr, int MilliSecTimeOut);

/* 从 Sock 中读出 Len 个字节或读到流结尾，成功返回 读到的字节数，
   失败返回负数：
   BS_ETIMEOUT 表示超时、BS_EOTHER 表示其他错误 */
int BsReadFromSocket(int Sock, void *Buf, int Len, int MilliSecTimeOut);

int BsReadFromSocketMaxLen(int Sock, void *Buf, int MaxLen, int MilliSecTimeOut);

/* 向 Sock 中写入 Len 个字节，成功返回 0 ，失败返回负数：
   BS_ETIMEOUT 表示超时、BS_EOTHER 表示其他错误 */
int BsWriteToSocket(int Sock, const void *Buf, int Len, int MilliSecTimeOut);

int BsReadFromSocketHSL(int Sock, void *Buf, int MaxLen, int MilliSecTimeOut);

int BsWriteToSocketHSL(int Sock, const void *Buf, int Len, int MilliSecTimeOut);

/* 休眠若干毫秒（千分之一秒）*/
void BsSleep(int Millisecond);

#ifdef __cplusplus
}
#endif

#endif
